home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / biblio / bibtex / contrib / economic / pnas.bst < prev    next >
Text File  |  1993-05-28  |  18KB  |  968 lines

  1. %%% ====================================================================
  2. %%%  @BibTeX-style-file{
  3. %%%     author          = "Alan R. Rogers",
  4. %%%     version         = "1.0",
  5. %%%     date            = "12 November 1992",
  6. %%%     time            = "16:07:20 MST",
  7. %%%     filename        = "pnas.bst",
  8. %%%     address         = "Department of Anthropology
  9. %%%                        University of Utah
  10. %%%                        Salt Lake City, UT 84112
  11. %%%                        USA",
  12. %%%     telephone       = "+1 801 581 5529",
  13. %%%     FAX             = "+1 801 581 6252",
  14. %%%     checksum        = "37034 967 2316 17724",
  15. %%%     email           = "rogers@anthro.utah.edu (Internet)",
  16. %%%     codetable       = "ISO/ASCII",
  17. %%%     keywords        = "",
  18. %%%     supported       = "yes",
  19. %%%     abstract        = "",
  20. %%%     docstring       = "This file produces bibliographies in the
  21. %%%                   format of ``Proceedings of the National
  22. %%%                   Academy of Sciences, USA.''",
  23. %%%  }
  24. %%% ====================================================================
  25. % This is "pnas.bst", modified from "unsrt.bst"
  26. % BibTeX standard bibliography style `unsrt'
  27.     % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
  28.     % Copyright (C) 1985, all rights reserved.
  29.     % Copying of this file is authorized only if either
  30.     % (1) you make absolutely no changes to your copy, including name, or
  31.     % (2) if you do make changes, you name it something other than
  32.     % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
  33.     % This restriction helps ensure that all standard styles are identical.
  34.     % The file btxbst.doc has the documentation for this style.
  35.  
  36. ENTRY
  37.   { address
  38.     author
  39.     booktitle
  40.     chapter
  41.     edition
  42.     editor
  43.     howpublished
  44.     institution
  45.     journal
  46.     key
  47.     month
  48.     note
  49.     number
  50.     organization
  51.     pages
  52.     publisher
  53.     school
  54.     series
  55.     title
  56.     type
  57.     volume
  58.     year
  59.   }
  60.   {}
  61.   { label }
  62.  
  63. INTEGERS { output.state before.all mid.sentence after.sentence after.block }
  64.  
  65. FUNCTION {init.state.consts}
  66. { #0 'before.all :=
  67.   #1 'mid.sentence :=
  68.   #2 'after.sentence :=
  69.   #3 'after.block :=
  70. }
  71.  
  72. STRINGS { s t }
  73.  
  74. FUNCTION {output.nonnull}
  75. { 's :=
  76.   output.state mid.sentence =
  77. %    { ", " * write$ }
  78.     { " " * write$ }
  79.     { output.state after.block =
  80.     { add.period$ write$
  81.       newline$
  82.       "\newblock " write$
  83.     }
  84.     { output.state before.all =
  85.         'write$
  86. %        { add.period$ " " * write$ }
  87.         { ", " * write$ }
  88.       if$
  89.     }
  90.       if$
  91.       mid.sentence 'output.state :=
  92.     }
  93.   if$
  94.   s
  95. }
  96.  
  97. FUNCTION {output}
  98. { duplicate$ empty$
  99.     'pop$
  100.     'output.nonnull
  101.   if$
  102. }
  103.  
  104. FUNCTION {output.check}
  105. { 't :=
  106.   duplicate$ empty$
  107.     { pop$ "empty " t * " in " * cite$ * warning$ }
  108.     'output.nonnull
  109.   if$
  110. }
  111.  
  112. FUNCTION {output.bibitem}
  113. { newline$
  114.   "\bibitem{" write$
  115.   cite$ write$
  116.   "}" write$
  117.   newline$
  118.   ""
  119.   before.all 'output.state :=
  120. }
  121.  
  122. FUNCTION {fin.entry}
  123. { add.period$
  124.   write$
  125.   newline$
  126. }
  127.  
  128. FUNCTION {new.block}
  129. { output.state before.all =
  130.     'skip$
  131.     { after.block 'output.state := }
  132.   if$
  133. }
  134.  
  135. FUNCTION {new.sentence}
  136. { output.state after.block =
  137.     'skip$
  138.     { output.state before.all =
  139.     'skip$
  140.     { after.sentence 'output.state := }
  141.       if$
  142.     }
  143.   if$
  144. }
  145.  
  146. FUNCTION {not}
  147. {   { #0 }
  148.     { #1 }
  149.   if$
  150. }
  151.  
  152. FUNCTION {and}
  153. {   'skip$
  154.     { pop$ #0 }
  155.   if$
  156. }
  157.  
  158. FUNCTION {or}
  159. {   { pop$ #1 }
  160.     'skip$
  161.   if$
  162. }
  163.  
  164. FUNCTION {new.block.checka}
  165. { empty$
  166.     'skip$
  167.     'new.block
  168.   if$
  169. }
  170.  
  171. FUNCTION {new.block.checkb}
  172. { empty$
  173.   swap$ empty$
  174.   and
  175.     'skip$
  176.     'new.block
  177.   if$
  178. }
  179.  
  180. FUNCTION {new.sentence.checka}
  181. { empty$
  182.     'skip$
  183.     'new.sentence
  184.   if$
  185. }
  186.  
  187. FUNCTION {new.sentence.checkb}
  188. { empty$
  189.   swap$ empty$
  190.   and
  191.     'skip$
  192.     'new.sentence
  193.   if$
  194. }
  195.  
  196. FUNCTION {field.or.null}
  197. { duplicate$ empty$
  198.     { pop$ "" }
  199.     'skip$
  200.   if$
  201. }
  202.  
  203. FUNCTION {emphasize}
  204. { duplicate$ empty$
  205.     { pop$ "" }
  206.     { "{\em " swap$ * "}" * }
  207.   if$
  208. }
  209.  
  210. FUNCTION {parenthesize}
  211. { duplicate$ empty$
  212.     { pop$ "" }
  213.     { "(" swap$ * ")" * }
  214.   if$
  215. }
  216.  
  217. FUNCTION {boldface}
  218. { duplicate$ empty$
  219.     { pop$ "" }
  220.     { "{\bf " swap$ * "}" * }
  221.   if$
  222. }
  223.  
  224. INTEGERS { nameptr namesleft numnames }
  225.  
  226. FUNCTION {format.names}
  227. { 's :=
  228.   #1 'nameptr :=
  229.   s num.names$ 'numnames :=
  230.   numnames 'namesleft :=
  231.     { namesleft #0 > }
  232.     { s nameptr "{vv~}{ll}{, jj}{, f}" format.name$ 't :=
  233.       nameptr #1 >
  234.     { namesleft #1 >
  235.         { ", " * t * }
  236.         { numnames #2 >
  237.         { ", " * }
  238.         'skip$
  239.           if$
  240.           t "others" =
  241.         { " et~al." * }
  242.         { " \& " * t * }
  243.           if$
  244.         }
  245.       if$
  246.     }
  247.     't
  248.       if$
  249.       nameptr #1 + 'nameptr :=
  250.       namesleft #1 - 'namesleft :=
  251.     }
  252.   while$
  253. }
  254.  
  255. FUNCTION {format.publisher}
  256. { publisher empty$
  257.     { address empty$
  258.       { "" }
  259.       { address }
  260.       if$
  261.     }
  262.     { address empty$
  263.       { publisher}
  264.       { publisher ", " * address * }
  265.       if$
  266.     }
  267.   if$
  268. }
  269.  
  270. FUNCTION {format.editors.as.authors}
  271. { editor empty$
  272.     { organization }
  273.     { editor format.names
  274.       editor num.names$ #1 >
  275.         {  ", eds." * }
  276.         {  ", ed." * }
  277.       if$
  278.     }
  279.   if$
  280. }
  281.  
  282. FUNCTION {format.authors}
  283. { author empty$
  284.     { editor empty$
  285.         { "" }
  286.         { editor format.names
  287.           editor num.names$ #1 >
  288.            {  ", eds." * }
  289.            {  ", ed." * }
  290.           if$
  291.         }
  292.       if$
  293.     }
  294.     { author format.names }
  295.   if$
  296. }
  297.  
  298. FUNCTION {format.editors}
  299. { editor empty$
  300.     { "" }
  301.     { author empty$ %in this case, see format.authors
  302.         { "" }
  303.         {  editor num.names$ #1 >
  304.          { "eds.{} " }
  305.          { "ed.{} " }
  306.            if$
  307.            editor format.names *
  308.         }
  309.       if$
  310.     }
  311.   if$
  312. }
  313.  
  314. FUNCTION {format.title}
  315. { title "t" change.case$
  316. }
  317.  
  318. FUNCTION {n.dashify}
  319. { 't :=
  320.   ""
  321.     { t empty$ not }
  322.     { t #1 #1 substring$ "-" =
  323.     { t #1 #2 substring$ "--" = not
  324.         { "--" *
  325.           t #2 global.max$ substring$ 't :=
  326.         }
  327.         {   { t #1 #1 substring$ "-" = }
  328.         { "-" *
  329.           t #2 global.max$ substring$ 't :=
  330.         }
  331.           while$
  332.         }
  333.       if$
  334.     }
  335.     { t #1 #1 substring$ *
  336.       t #2 global.max$ substring$ 't :=
  337.     }
  338.       if$
  339.     }
  340.   while$
  341. }
  342.  
  343. FUNCTION {format.date}
  344. { year empty$
  345.     { "year?" parenthesize    }
  346.     { year parenthesize }
  347.   if$
  348. }
  349.  
  350. FUNCTION {format.btitle.series}
  351. { title empty$
  352.     { "" }
  353.     { title emphasize }
  354.   if$
  355.   series empty$
  356.     { "" * }
  357.     { ", " * series * }
  358.   if$
  359. }
  360.  
  361. FUNCTION {tie.or.space.connect}
  362. { duplicate$ text.length$ #3 <
  363.     { "~" }
  364.     { " " }
  365.   if$
  366.   swap$ * *
  367. }
  368.  
  369. FUNCTION {comma.connect}
  370. { duplicate$ empty$
  371.     { pop$ }
  372.     { swap$
  373.       duplicate$ empty$
  374.         { pop$ }
  375.         { swap$  ", " swap$ * * }
  376.       if$
  377.     }
  378.   if$
  379. }
  380.  
  381. FUNCTION {either.or.check}
  382. { empty$
  383.     'pop$
  384.     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  385.   if$
  386. }
  387.  
  388. FUNCTION {format.bvolume.number}
  389. { volume empty$
  390.     { number empty$
  391.         { "" }
  392.         { "No.{}" number tie.or.space.connect }
  393.       if$
  394.     }
  395.     { "Vol.{}" volume tie.or.space.connect
  396.       "volume and number" number either.or.check
  397.     }
  398.   if$
  399. }
  400.  
  401. FUNCTION {format.number}
  402. { volume empty$
  403.     { number empty$
  404.     { "" }
  405.     { "No.{}" number tie.or.space.connect    }
  406.       if$
  407.     }
  408.     { "" }
  409.   if$
  410. }
  411.  
  412. FUNCTION {format.edition}
  413. { edition empty$
  414.     { "" }
  415.     { output.state mid.sentence =
  416.     { edition "l" change.case$ " edition" * }
  417.     { edition "t" change.case$ " edition" * }
  418.       if$
  419.     }
  420.   if$
  421. }
  422.  
  423. INTEGERS { multiresult }
  424.  
  425. FUNCTION {multi.page.check}
  426. { 't :=
  427.   #0 'multiresult :=
  428.     { multiresult not
  429.       t empty$ not
  430.       and
  431.     }
  432.     { t #1 #1 substring$
  433.       duplicate$ "-" =
  434.       swap$ duplicate$ "," =
  435.       swap$ "+" =
  436.       or or
  437.     { #1 'multiresult := }
  438.     { t #2 global.max$ substring$ 't := }
  439.       if$
  440.     }
  441.   while$
  442.   multiresult
  443. }
  444.  
  445. FUNCTION {format.pages}
  446. { pages empty$
  447.     { "" }
  448.     { pages multi.page.check
  449.     { "pp." pages n.dashify tie.or.space.connect }
  450.     { "p." pages tie.or.space.connect }
  451.       if$
  452.     }
  453.   if$
  454. }
  455.  
  456. FUNCTION {format.vol.num.pages}
  457. { volume boldface
  458.   pages empty$
  459.     'skip$
  460.     { duplicate$ empty$
  461.     { pop$ format.pages }
  462.     { ", " * pages n.dashify * }
  463.       if$
  464.     }
  465.   if$
  466. }
  467.  
  468. FUNCTION {format.chapter.pages}
  469. { chapter empty$
  470.     'format.pages
  471.     { type empty$
  472.     { "chapter" }
  473.     { type "l" change.case$ }
  474.       if$
  475.       chapter tie.or.space.connect
  476.       pages empty$
  477.     'skip$
  478.     { ", " * format.pages * }
  479.       if$
  480.     }
  481.   if$
  482. }
  483.  
  484. FUNCTION {format.in.ed.booktitle}
  485. { booktitle empty$
  486.     { "" }
  487.     { "in " booktitle emphasize * }
  488.   if$
  489.   series empty$
  490.     { "" * }
  491.     { booktitle empty$
  492.         { "XXmissing booktitle \& seriesXX" * }
  493.         { ", " * }
  494.       if$
  495.       series *
  496.     }
  497.   if$
  498. }
  499.  
  500. FUNCTION {empty.misc.check}
  501. { author empty$ title empty$ howpublished empty$
  502.   month empty$ year empty$ note empty$
  503.   and and and and and
  504.     { "all relevant fields are empty in " cite$ * warning$ }
  505.     'skip$
  506.   if$
  507. }
  508.  
  509. FUNCTION {format.thesis.type}
  510. { type empty$
  511.     'skip$
  512.     { pop$
  513.       type "t" change.case$
  514.     }
  515.   if$
  516. }
  517.  
  518. FUNCTION {format.tr.number}
  519. { type empty$
  520.     { "Technical Report" }
  521.     'type
  522.   if$
  523.   number empty$
  524.     { "t" change.case$ }
  525.     { number tie.or.space.connect }
  526.   if$
  527. }
  528.  
  529. FUNCTION {format.article.crossref}
  530. { key empty$
  531.     { journal empty$
  532.     { "need key or journal for " cite$ * " to crossref " * crossref *
  533.       warning$
  534.       ""
  535.     }
  536.     { "In {\em " journal * "\/}" * }
  537.       if$
  538.     }
  539.     { "In " key * }
  540.   if$
  541.   " \cite{" * crossref * "}" *
  542. }
  543.  
  544. FUNCTION {format.crossref.editor}
  545. { editor #1 "{vv~}{ll}" format.name$
  546.   editor num.names$ duplicate$
  547.   #2 >
  548.     { pop$ " et~al." * }
  549.     { #2 <
  550.     'skip$
  551.     { editor #2 "{vv }{ll}{ jj}{, f}" format.name$ "others" =
  552.         { " et~al." * }
  553.         { " and " * editor #2 "{vv~}{ll}" format.name$ * }
  554.       if$
  555.     }
  556.       if$
  557.     }
  558.   if$
  559. }
  560.  
  561. FUNCTION {format.book.crossref}
  562. { volume empty$
  563.     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  564.       "In "
  565.     }
  566.     { "Vol.{}" volume tie.or.space.connect
  567.       " of " *
  568.     }
  569.   if$
  570.   editor empty$
  571.   editor field.or.null author field.or.null =
  572.   or
  573.     { key empty$
  574.     { series empty$
  575.         { "need editor, key, or series for " cite$ * " to crossref " *
  576.           crossref * warning$
  577.           "" *
  578.         }
  579.         { "{\em " * series * "\/}" * }
  580.       if$
  581.     }
  582.     { key * }
  583.       if$
  584.     }
  585.     { format.crossref.editor * }
  586.   if$
  587.   " \cite{" * crossref * "}" *
  588. }
  589.  
  590. FUNCTION {format.incoll.inproc.crossref}
  591. { editor empty$
  592.   editor field.or.null author field.or.null =
  593.   or
  594.     { key empty$
  595.     { booktitle empty$
  596.         { "need editor, key, or booktitle for " cite$ * " to crossref " *
  597.           crossref * warning$
  598.           ""
  599.         }
  600.         { "in {\em " booktitle * "\/}" * }
  601.       if$
  602.     }
  603.     { "in " key * }
  604.       if$
  605.     }
  606.     { "in " format.crossref.editor * }
  607.   if$
  608.   " \cite{" * crossref * "}" *
  609. }
  610.  
  611. FUNCTION {article}
  612. { output.bibitem
  613.   format.authors "author" output.check
  614.   new.block
  615.   format.date "year" output.check
  616.   crossref missing$
  617.     { journal emphasize "journal" output.check
  618.       format.vol.num.pages output
  619.     }
  620.     { format.article.crossref output.nonnull
  621.       format.pages output
  622.     }
  623.   if$
  624.   new.block
  625.   note output
  626.   fin.entry
  627. }
  628.  
  629. FUNCTION {book}
  630. { output.bibitem
  631.   format.authors output.nonnull
  632.   crossref missing$
  633.     { "author and editor" editor either.or.check }
  634.     'skip$
  635.   if$
  636.   new.block
  637.   format.date "year" output.check
  638.   format.btitle.series "title" output.check
  639.   crossref missing$
  640.     { format.editors output
  641.       new.block
  642.       format.publisher parenthesize output
  643.       format.bvolume.number output
  644.       new.sentence
  645.     }
  646.     { new.block
  647.       format.book.crossref output.nonnull
  648.     }
  649.   if$
  650.   format.edition output
  651.   new.sentence
  652.   format.pages output
  653.   new.block
  654.   note output
  655.   fin.entry
  656. }
  657.  
  658. FUNCTION {booklet}
  659. { output.bibitem
  660.   format.authors output
  661.   new.block
  662.   format.date output
  663.   format.title "title" output.check
  664.   howpublished address comma.connect parenthesize output
  665.   new.block
  666.   note output
  667.   fin.entry
  668. }
  669.  
  670. FUNCTION {inbook}
  671. { output.bibitem
  672.   format.authors output.nonnull
  673.   new.block
  674.   format.date "year" output.check
  675.   format.btitle.series "title" output.check
  676.   new.sentence
  677.   crossref missing$
  678.     { format.editors output
  679.       new.block
  680.       format.publisher parenthesize output
  681.       format.bvolume.number output
  682.       new.sentence
  683.     }
  684.     { format.chapter.pages "chapter and pages" output.check
  685.       new.block
  686.       format.book.crossref output.nonnull
  687.     }
  688.   if$
  689.   format.edition output
  690.   new.sentence
  691.   format.pages output
  692.   new.block
  693.   note output
  694.   fin.entry
  695. }
  696.  
  697. FUNCTION {incollection}
  698. { output.bibitem
  699.   format.authors "author" output.check
  700.   new.block
  701.   format.date "year" output.check
  702.   format.in.ed.booktitle "title" output.check
  703.   new.sentence
  704.   crossref missing$
  705.     { format.editors output
  706.       new.block
  707.       format.publisher parenthesize output
  708.       format.bvolume.number output
  709.       new.sentence
  710.     }
  711.     { format.incoll.inproc.crossref output.nonnull
  712.       format.chapter.pages output
  713.     }
  714.   if$
  715.   format.edition output
  716.   new.sentence
  717.   format.pages output
  718.   new.block
  719.   note output
  720.   fin.entry
  721. }
  722.  
  723. FUNCTION {inproceedings}
  724. { output.bibitem
  725.   format.authors "author" output.check
  726.   new.block
  727.   format.date "year" output.check
  728.   crossref missing$
  729.     { format.btitle.series "title" output.check
  730.       format.editors output
  731.       new.block
  732.       organization publisher comma.connect
  733.       address comma.connect
  734.       parenthesize output
  735.       new.sentence
  736.       format.bvolume.number output
  737.       new.sentence
  738.     }
  739.     { format.incoll.inproc.crossref output.nonnull
  740.     }
  741.   if$
  742.   format.pages output
  743.   new.block
  744.   note output
  745.   fin.entry
  746. }
  747.  
  748. FUNCTION {conference} { inproceedings }
  749.  
  750. FUNCTION {manual}
  751. { output.bibitem
  752.   author empty$
  753.     { organization empty$
  754.     'skip$
  755.     { organization output.nonnull }
  756.       if$
  757.     }
  758.     { format.authors output.nonnull }
  759.   if$
  760.   new.block
  761.   format.date "year" output.check
  762.   format.btitle.series "title" output.check
  763.   author empty$
  764.     { ""  }
  765.     { organization }
  766.   if$
  767.   publisher comma.connect address comma.connect parenthesize output
  768.   new.sentence
  769.   format.edition output
  770.   new.block
  771.   note output
  772.   fin.entry
  773. }
  774.  
  775. FUNCTION {mastersthesis}
  776. { output.bibitem
  777.   format.authors "author" output.check
  778.   new.block
  779.   format.date "year" output.check
  780.   "Master's thesis" format.thesis.type output.nonnull
  781.   school address comma.connect parenthesize output
  782.   new.block
  783.   note output
  784.   fin.entry
  785. }
  786.  
  787. FUNCTION {misc}
  788. { output.bibitem
  789.   format.authors output
  790.   new.block
  791.   format.date output
  792.   format.title output
  793.   howpublished parenthesize output
  794.   new.block
  795.   note output
  796.   fin.entry
  797.   empty.misc.check
  798. }
  799.  
  800. FUNCTION {phdthesis}
  801. { output.bibitem
  802.   format.authors "author" output.check
  803.   new.block
  804.   format.date "year" output.check
  805.   "Ph.D. thesis" format.thesis.type output.nonnull
  806.   school address comma.connect parenthesize output
  807.   new.block
  808.   note output
  809.   fin.entry
  810. }
  811.  
  812. FUNCTION {proceedings}
  813. { output.bibitem
  814.   format.editors.as.authors output
  815.   new.block
  816.   format.date output
  817.   format.btitle.series "title" output.check
  818.   organization publisher comma.connect
  819.   address comma.connect parenthesize output
  820.   format.bvolume.number output
  821.   new.sentence
  822.   format.pages output
  823.   new.block
  824.   note output
  825.   fin.entry
  826. }
  827.  
  828. FUNCTION {techreport}
  829. { output.bibitem
  830.   format.authors "author" output.check
  831.   new.block
  832.   format.date output
  833.   format.title "title" output.check
  834.   new.sentence
  835.   institution address comma.connect parenthesize output
  836.   new.sentence
  837.   format.tr.number output.nonnull
  838.   new.block
  839.   note output
  840.   fin.entry
  841. }
  842.  
  843. FUNCTION {unpublished}
  844. { output.bibitem
  845.   format.authors "author" output.check
  846.   new.block
  847.   format.date output
  848.   format.title "title" output.check
  849.   new.block
  850.   note "note" output.check
  851.   fin.entry
  852. }
  853.  
  854. FUNCTION {default.type} { misc }
  855.  
  856. MACRO {jan} {"January"}
  857.  
  858. MACRO {feb} {"February"}
  859.  
  860. MACRO {mar} {"March"}
  861.  
  862. MACRO {apr} {"April"}
  863.  
  864. MACRO {may} {"May"}
  865.  
  866. MACRO {jun} {"June"}
  867.  
  868. MACRO {jul} {"July"}
  869.  
  870. MACRO {aug} {"August"}
  871.  
  872. MACRO {sep} {"September"}
  873.  
  874. MACRO {oct} {"October"}
  875.  
  876. MACRO {nov} {"November"}
  877.  
  878. MACRO {dec} {"December"}
  879.  
  880. MACRO {acmcs} {"ACM Computing Surveys"}
  881.  
  882. MACRO {acta} {"Acta Informatica"}
  883.  
  884. MACRO {cacm} {"Communications of the ACM"}
  885.  
  886. MACRO {ibmjrd} {"IBM Journal of Research and Development"}
  887.  
  888. MACRO {ibmsj} {"IBM Systems Journal"}
  889.  
  890. MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
  891.  
  892. MACRO {ieeetc} {"IEEE Transactions on Computers"}
  893.  
  894. MACRO {ieeetcad}
  895.  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
  896.  
  897. MACRO {ipl} {"Information Processing Letters"}
  898.  
  899. MACRO {jacm} {"Journal of the ACM"}
  900.  
  901. MACRO {jcss} {"Journal of Computer and System Sciences"}
  902.  
  903. MACRO {scp} {"Science of Computer Programming"}
  904.  
  905. MACRO {sicomp} {"SIAM Journal on Computing"}
  906.  
  907. MACRO {tocs} {"ACM Transactions on Computer Systems"}
  908.  
  909. MACRO {tods} {"ACM Transactions on Database Systems"}
  910.  
  911. MACRO {tog} {"ACM Transactions on Graphics"}
  912.  
  913. MACRO {toms} {"ACM Transactions on Mathematical Software"}
  914.  
  915. MACRO {toois} {"ACM Transactions on Office Information Systems"}
  916.  
  917. MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
  918.  
  919. MACRO {tcs} {"Theoretical Computer Science"}
  920.  
  921. READ
  922.  
  923. STRINGS { longest.label }
  924.  
  925. INTEGERS { number.label longest.label.width }
  926.  
  927. FUNCTION {initialize.longest.label}
  928. { "" 'longest.label :=
  929.   #1 'number.label :=
  930.   #0 'longest.label.width :=
  931. }
  932.  
  933. FUNCTION {longest.label.pass}
  934. { number.label int.to.str$ 'label :=
  935.   number.label #1 + 'number.label :=
  936.   label width$ longest.label.width >
  937.     { label 'longest.label :=
  938.       label width$ 'longest.label.width :=
  939.     }
  940.     'skip$
  941.   if$
  942. }
  943.  
  944. EXECUTE {initialize.longest.label}
  945.  
  946. ITERATE {longest.label.pass}
  947.  
  948. FUNCTION {begin.bib}
  949. { preamble$ empty$
  950.     'skip$
  951.     { preamble$ write$ newline$ }
  952.   if$
  953.   "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
  954. }
  955.  
  956. EXECUTE {begin.bib}
  957.  
  958. EXECUTE {init.state.consts}
  959.  
  960. ITERATE {call.type$}
  961.  
  962. FUNCTION {end.bib}
  963. { newline$
  964.   "\end{thebibliography}" write$ newline$
  965. }
  966.  
  967. EXECUTE {end.bib}
  968.